如何向 AAD 进行身份验证并使用 PowerShell 将 Graph API 作为本机客户端应用程序调用?

How can I authenticate to AAD and call the Graph API as a Native Client application with PowerShell?

我正在尝试在 Azure Active Directory 上进行一些非常快速的测试,我需要一个工具来快速验证 AAD,并调用 AAD Graph API。

我已经在我的目录中注册了一个 Native Client 应用程序,并且我已经将其设置为具有调用 AAD 图形的适当权限 API。

我想看看我的 AAD 令牌,以及调用后图形 API 的输出。如何使用 PowerShell 快速完成此操作?

>> See here for instructions on how to create a similar script for emulating a Daemon Client Application using the Client Credential Flow.

PowerShell 允许您将 .NET 程序集直接加载到命令行中。这意味着您可以加载 ADAL (Azure Active Directory Authentication Libraries) 并使用它来真正简化身份验证体验。从 ADAL 获取令牌后,您只需使用 Invoke-RestMethod cmdlet 即可调用 AAD 图 API.

首先,您需要下载并保存 ADAL 的 .NET dll。下载link可以找到on Nuget.

注:我们这里专门使用ADAL v2

You can extract the contents of the .nupkg with a File Extractor like 7z, WinZip, etc...

\lib\net45\中提取内容并将它们复制到您的工作目录中。我将文件放在它们自己的 "ADAL" 文件夹中,以保持独立。

然后您应该能够使用以下内容创建一个新的 PowerShell 脚本:

# Load ADAL
Add-Type -Path ".\ADAL\Microsoft.IdentityModel.Clients.ActiveDirectory.dll"

# Output Token and Response from AAD Graph API
$accessToken = ".\Token.txt"
$output = ".\Output.json"

# Application and Tenant Configuration
$clientId = "<AppIDGUID>"
$tenantId = "<TenantID>"
$resourceId = "https://graph.windows.net"
$redirectUri = New-Object system.uri("<ReplyURL>")
$login = "https://login.microsoftonline.com"

# Get an Access Token with ADAL
$authContext = New-Object Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext ("{0}/{1}" -f $login,$tenantId)
$authenticationResult = $authContext.AcquireToken($resourceId, $clientID, $redirectUri) 
($token = $authenticationResult.AccessToken) | Out-File $accessToken

# Call the AAD Graph API
$headers = @{ 
    "Authorization" = ("Bearer {0}" -f $token);
    "Content-Type" = "application/json";
}

Invoke-RestMethod -Method Get -Uri ("{0}/{1}/users?api-version=1.6" -f $resourceId, $tenantId) -Headers $headers -OutFile $output

注意:您需要在此脚本中更新 App ID、租户 ID 和回复 URL。我还预先配置了 AAD Graph API 对我租户中 return 用户的调用,但您可以将此 REST 调用更改为任何您想要的。

成功 运行 脚本后,您应该在工作目录中获得 2 个新文件: 一个包含编码的 JSON 访问令牌的文本文件,可以在诸如this,以及一个 JSON 文件,其中包含 AAD 图 API 的响应。

如果有帮助请告诉我!